index.html.vue 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. <template>
  2. <!-- 头部 -->
  3. <templateHead></templateHead>
  4. <!-- 菜单 -->
  5. <templateMenu></templateMenu>
  6. <!-- 内容 -->
  7. <div v-for="(item,index) in templateData" :key="index">
  8. <!--1.频道菜单-->
  9. <div v-if="item.sectorName=='channelMenu'">
  10. <templateChannelMenu :skinId="skinId" :routeId="routeId" :navigateData="navigateData.data" :templateData="item.componentList"></templateChannelMenu>
  11. </div>
  12. <!--2.广告组件-->
  13. <div v-if="item.sectorName=='adSector'">
  14. <templateAd :skinId="skinId" :adData="adData" :adTag="item.ad.ad_tag" ></templateAd>
  15. </div>
  16. <!--3.滚动图文组合-->
  17. <div v-if="item.sectorName=='scrollTextSector'">
  18. <templateScrollList :skinId="skinId" :templateData="item.componentList"></templateScrollList>
  19. </div>
  20. <!--4.图文组合1-->
  21. <div v-if="item.sectorName=='manyPictureSector'">
  22. <templateNewSector1 :skinId="skinId" :templateData="item.componentList"></templateNewSector1>
  23. </div>
  24. <!--5.图文组合2-->
  25. <div v-if="item.sectorName=='commentSector'">
  26. <templateNewSector2 :skinId="skinId" :templateData="item.componentList"></templateNewSector2>
  27. </div>
  28. <!--6.图文组合3-->
  29. <div v-if="item.sectorName=='listSector'">
  30. <templateNewSector3 :skinId="skinId" :templateData="item.componentList"></templateNewSector3>
  31. </div>
  32. </div>
  33. <!-- 底部 -->
  34. <templateFoot></templateFoot>
  35. </template>
  36. <script setup lang="ts">
  37. //0.加载全局模板组件 start---------------------------------------->
  38. //0.1全局通栏
  39. import templateHead from '@/components/template/sector/head/1200x200/1.vue'
  40. import templateMenu from '@/components/template/sector/menu/1200x130/1.vue'
  41. import templateFoot from '@/components/template/sector/foot/1200x580/1.vue'
  42. //0.2局部通栏
  43. //0.2.1广告组件
  44. import templateAd from '@/components/template/sector/body/ad/1200x90/1.vue'
  45. //0.2.2 频道菜单
  46. import templateChannelMenu from '@/components/template/sector/body/class/menu/1200x100/1.vue'
  47. //0.2.3 滚动图文组合
  48. import templateScrollList from '@/components/template/sector/body/class/banner/1200x410/1.vue'
  49. //0.2.3 图文组合1
  50. import templateNewSector1 from '@/components/template/sector/body/index/list/1200x470/1.vue'
  51. //0.2.4 图文组合2
  52. import templateNewSector2 from '@/components/template/sector/body/index/list/1200x470/2.vue'
  53. //0.2.5 图文组合3
  54. import templateNewSector3 from '@/components/template/sector/body/index/list/1200x980/1.vue'
  55. //0.加载全局模板组件 end---------------------------------------->
  56. //1.获得基本信息单元 start---------------------------------------->
  57. //1.1获得页面依赖
  58. import { ref, onMounted } from 'vue';
  59. import { ElMessage } from 'element-plus';
  60. //1.2使用url查询导航池id
  61. const targetSegment = getRoutePath(1);
  62. const routeId = ref<number>(0);
  63. const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
  64. method: 'GET',
  65. query: {
  66. 'pinyin': targetSegment,
  67. },
  68. });
  69. if (getRouteId.code == 200) {
  70. routeId.value = getRouteId.data.category_id
  71. }
  72. //1.4获得pinia源
  73. import { useTemplateBaseStore } from '@/stores/templateBase'
  74. const templateBaseStore:any = useTemplateBaseStore()
  75. //1.5获得该页的皮肤id - 在每个组件中也是同样的获得方法
  76. const skinId = ref<number>(0)
  77. const websiteId = ref<number>(0)
  78. //1.6获得站点基本信息
  79. const responseStatus = await requestDataPromise('/web/getWebsiteAllinfo', {
  80. method: 'GET',
  81. query: {
  82. 'link_textnum':24,
  83. 'link_imgnum':18,
  84. 'link_footnum':4
  85. },
  86. });
  87. if (responseStatus.code == 200) {
  88. if(responseStatus.data.website_foot.foot_info.status == 1){
  89. //网站模板已停用,直接转入404页面
  90. navigateTo('/error?findPage=index')
  91. }else{
  92. //1.6.1设置站点基本信息
  93. templateBaseStore.setWebSiteInfo(responseStatus.data)
  94. websiteId.value = responseStatus.data.website_head.id;//获得网站id
  95. //1.6.2设置皮肤id
  96. skinId.value = templateBaseStore.webSiteInfo.website_foot.foot_info.template_id;
  97. }
  98. }
  99. //1.7.seo
  100. const setData = await requestDataPromise('/web/getWebsiteCategoryHead', {
  101. method: 'GET',
  102. query: {
  103. 'catid': routeId.value
  104. },
  105. });
  106. let seoTitle = setData.data.seo_title;
  107. let seoDescription = setData.data.seo_description;
  108. let seoKeywords = setData.data.seo_keywords;
  109. let seoSuffix = setData.data.suffix;
  110. let seoName = setData.data.website_name;
  111. useHead({
  112. title: seoTitle + "_" + seoSuffix,
  113. meta: [
  114. { name: 'keywords', content: seoKeywords + "_" + seoName + "_" + seoSuffix, tagPriority: 10 },
  115. { name: 'description', content: seoDescription + "_" + seoName + "_" + seoSuffix, tagPriority: 10 }
  116. ]
  117. });
  118. //1.获得基本信息单元 end---------------------------------------->
  119. //2.页面数据 start---------------------------------------->
  120. //2.1预创建请求数据
  121. const templateGetData:any = [
  122. {"parent":routeId.value+",0,0","child":"","imgnum":0,"textnum":0},
  123. {"parent":routeId.value+",0,0","child":"","imgnum":0,"textnum":0},
  124. {"parent":routeId.value+",0,0","child":"","imgnum":0,"textnum":0},
  125. {"parent":routeId.value+",0,0","child":"","imgnum":0,"textnum":0},
  126. {"parent":routeId.value+",0,0","child":"","imgnum":0,"textnum":0},
  127. {"parent":routeId.value+",0,0","child":"","imgnum":0,"textnum":0},
  128. {"parent":routeId.value+",0,0","child":"","imgnum":0,"textnum":0},
  129. {"parent":routeId.value+",0,0","child":"","imgnum":0,"textnum":0},
  130. {"parent":routeId.value+",0,0","child":"","imgnum":0,"textnum":0}
  131. ]
  132. //2.2获得模板数据
  133. const response:any = await requestDataPromise('/client/indexData', {
  134. method: 'POST',
  135. body: {
  136. 'website_id':websiteId.value,
  137. 'getpage':'class'
  138. },
  139. });
  140. const templateData = response.data.template.class;
  141. //是否启用搜索功能
  142. templateBaseStore.setIsSearch(response.data.isSearch)
  143. //console.log(templateData)
  144. //2.2.1循环一下模板数据,把所有需要请求后端内容的组件里面imgSize和textSize拿出来
  145. const getIndex = ref<number>(0);
  146. for(let item of templateData){
  147. if(item.sectorName == 'scrollTextSector'||item.sectorName == 'manyPictureSector'||item.sectorName == 'commentSector'||item.sectorName == 'listSector'){
  148. for(let i of item.componentList){
  149. templateGetData[getIndex.value].imgnum = i.componentData.imgSize;
  150. templateGetData[getIndex.value].textnum = i.componentData.textSize;
  151. getIndex.value++;
  152. }
  153. }
  154. }
  155. //2.3 获得导航数据
  156. const navigateData = await requestDataPromise('/web/getWebsiteModelCategory', {
  157. method: 'GET',
  158. query: {
  159. 'placeid': 1,
  160. 'pid': routeId.value,
  161. 'num': 8
  162. },
  163. });
  164. const getNavIndex = ref<number>(0);
  165. for(let item of navigateData.data){
  166. templateGetData[getNavIndex.value].child = item.category_id;
  167. getNavIndex.value++;
  168. }
  169. //获得完整的请求数据
  170. const jsonString = JSON.stringify(getTransformArray(templateGetData));
  171. //2.4获得页面完整的请求数据
  172. const mkdata = await requestDataPromise('/web/getWebsiteAllArticle', {
  173. method: 'GET',
  174. query: {
  175. 'id': jsonString
  176. },
  177. });
  178. if (mkdata.code == 200) {
  179. //获得所有子频道的内容
  180. let childData = ref<any>([]);
  181. for(let item of mkdata.data){
  182. childData.value.push(item.child)
  183. }
  184. let dataSort = ref<number>(0);
  185. const childDataLength = childData.value.length;
  186. //如果当前循环的这个组件数据长度已经超过了所有子频道的总数居量,则从0开始循环
  187. //此操作是为了防止B端创建的组件数超过了后台的导航数量
  188. for(let item of templateData){
  189. if(item.sectorName == 'scrollTextSector'){
  190. item.componentList[0].componentData.data = childData.value[dataSort.value % childDataLength];
  191. dataSort.value++;
  192. }
  193. if(item.sectorName == 'manyPictureSector'){
  194. item.componentList[0].componentData.data = childData.value[dataSort.value % childDataLength];
  195. dataSort.value++;
  196. item.componentList[1].componentData.data = childData.value[dataSort.value % childDataLength];
  197. dataSort.value++;
  198. }
  199. if(item.sectorName == 'commentSector'){
  200. item.componentList[0].componentData.data = childData.value[dataSort.value % childDataLength];
  201. dataSort.value++;
  202. item.componentList[1].componentData.data = childData.value[dataSort.value % childDataLength];
  203. dataSort.value++;
  204. }
  205. if(item.sectorName == 'listSector'){
  206. item.componentList[0].componentData.data = childData.value[dataSort.value % childDataLength];
  207. dataSort.value++;
  208. item.componentList[1].componentData.data = childData.value[dataSort.value % childDataLength];
  209. dataSort.value++;
  210. item.componentList[2].componentData.data = childData.value[dataSort.value % childDataLength];
  211. dataSort.value++;
  212. }
  213. }
  214. //console.log(templateData)
  215. }
  216. //2.5广告数据
  217. const adData:any = ref([]);
  218. adData.value.push(response.data.ad.top)
  219. for(let item of response.data.ad.class){
  220. adData.value.push(item)
  221. }
  222. templateBaseStore.setAdList(adData.value)
  223. //2.页面数据 end---------------------------------------->
  224. </script>
  225. <style lang="less" scoped>
  226. @import '@/assets/css/class.less';
  227. </style>